/***********************************************************
*discription    时间、日期控件示例
*author         david
*date           2021-5-12
*modify         2021-5-12 8：30
************************************************************/
#include "mainWindow.h"

mainWindow::mainWindow()
{
	//QRect screenRect = QApplication::desktop()->screenGeometry();
	//this.setGeometry(100, 100, 800, 400);
    /***************************定时器********************************/
    QTimer *timer = new QTimer(this);
    // 设置定时间隔
    timer->setInterval(3000);
    connect(timer, SIGNAL(timeout()), this, SLOT(onTimeOutSlot()));
    // 启动定时器
    timer->start();

    /***************************时间日期控件********************************/
    dateEdit = new QDateEdit(QDate::currentDate(), this);
    timeEdit = new QTimeEdit(QTime::currentTime(), this);
    dateTimeEdit = new QDateTimeEdit(QDateTime::currentDateTime(), this);
    //设置显示格式
    dateEdit->setDisplayFormat("yyyy/MM/dd HH:mm:ss");
    timeEdit->setDisplayFormat("yyyy/MM/dd HH:mm:ss");
    dateTimeEdit->setDisplayFormat("yyyy/MM/dd HH:mm:ss");
    // 正确
    //dateEdit->setDisplayFormat("yyyy/MM/dd");
    //timeEdit->setDisplayFormat("HH:mm:ss");
    // 设置日期时间
    dateEdit->setDateTime(QDateTime::currentDateTime());
    timeEdit->setDateTime(QDateTime::currentDateTime());
    dateTimeEdit->setMinimumDate(QDate::currentDate().addDays(-365));  // -365天
    dateTimeEdit->setMaximumDate(QDate::currentDate().addDays(365));  // +365天

    /***************************日历控件********************************/
    calendar = new QCalendarWidget(this);
    //设置日历的文本格式
    calendar->setFont(QFont("Timers",8,QFont::Bold));
    //设置日历的大小
    calendar->resize(300,200);
    //日历移动
    calendar->move(0,200);
    //日历隐藏hide，显示用show（）
    calendar->show();

    /***************************布局********************************/
	QVBoxLayout *vLay = new QVBoxLayout();
	QHBoxLayout *hLay = new QHBoxLayout();
    //增加控件
    hLay->addWidget(timeEdit);
    hLay->addWidget(dateEdit);
    hLay->addWidget(dateTimeEdit);
	vLay->addLayout(hLay);
    textEdit = new QTextEdit("textEdit");
    vLay->addWidget(calendar);
    vLay->addWidget(textEdit);
	//整体布局
    QWidget *pWidget = new QWidget(this);
    pWidget->setLayout(vLay);
    setCentralWidget(pWidget);

    /***************************绑定信号和槽********************************/
    connect(dateEdit, SIGNAL(dateChanged(QDate)), this, SLOT(onDateChangedSlot(QDate)));
    connect(timeEdit, SIGNAL(timeChanged(QTime)), this, SLOT(onTimeChangedSlot(QTime)));
    connect(dateTimeEdit, SIGNAL(dateTimeChanged(QDateTime)), this, SLOT(onDateTimeChangedSlot(QDateTime)));
    connect(calendar,SIGNAL(selectionChanged()),this,SLOT(calenderWidgetSlot()));
}


void mainWindow::calenderWidgetSlot()
{
    qDebug()<<calendar->selectedDate().toString("yyyy-MM-dd");
}

void mainWindow::onTimeOutSlot()
{
    // 获取系统当前时间
    QDateTime dateTime = QDateTime::currentDateTime();
    // 显示的内容
    textEdit->append(dateTime.toString("yyyy-MM-dd HH:mm:ss.zzz"));
}

// 日期发生改变时执行
void mainWindow::onDateChangedSlot(const QDate &date)
{
    textEdit->append("QDate : "+date.toString("yyyy-MM-dd"));
}

// 时间发生改变时执行
void mainWindow::onTimeChangedSlot(const QTime &time)
{
    textEdit->append("QTime : "+time.toString("HH:mm:ss.zzz"));
}

// 无论日期还是时间发生改变，都会执行
void mainWindow::onDateTimeChangedSlot(const QDateTime &dateTime)
{
    textEdit->append("QDateTime : "+dateTime.toString("yyyy-MM-dd HH:mm:ss.zzz"));
}
